package com.zimmur.service.goods;

import java.util.List;

import com.zimmur.model.goods.Goods;
import com.zimmur.model.goods.GoodsParameter;
import com.zimmur.model.zone.RecommendAd;
import com.zimmur.model.zone.RecommendHomeGoods;
/**
 * 商品信息服务接口
 * @author Administrator
 *
 */
import com.zimmur.tools.PageUtil;
public interface IGoodsService {  
	
	/**
	 * 商品查询
	 * @param goodsType
	 * @return
	 */
	List<Goods> selectGoodsListByQuery(GoodsParameter goodsParameter);
	/**
	 * 商品查询 记录数
	 * @param goodsType
	 * @return
	 */
	int selectGoodsListByQueryCount(GoodsParameter goodsParameter);
	/**
	 * 获取单个商品详情
	 * @param productId
	 * @return
	 */
    public Goods selectByGoodsId(long goodsId);
	/**
	 * 获取单个商品详情并且显示用户是否收藏
	 * @param productId
	 * @return
	 */
    public Goods selectByGoodsIdAndIsCollect(long userId,long goodsId);
    /**
     * 获取多个商品信息
     * @param productIds 商品ID,以逗号分隔
     * @return
     */
    public List<Goods> selectByGoodsIds(List<Long> goodsIds);
    /**
     * 获取用户收藏商品列表
     * @param userId
     * @param goodsIds 商品ID
     * @return 返回商品列表按收藏时间降序排列
     */
    public List<Goods> selectUserCollectionByGoodsIds(Long userId,int curPage);
    /**
     * 获取多个商品信息
     * @param goodsIds 商品ID,以逗号分隔
     * @param typeFlag 分类类别 1衣匠/2家定
     * @return
     */
    public List<Goods> selectByGoodsIdsAndTypeFlag(List<Long> goodsIds,Integer typeFlag);
    /**
     * 根据类别ID获取多个商品信息
     * @param productIds 类别ID,以逗号分隔
     * @return
     */
    public List<Goods> selectListByTypeIds(GoodsParameter goodsParameter);
    /**
     * 根据类别ID获取商品记录数
     * @param typeIds 类别ID,以逗号分隔
     * @return
     */
    public int selectListByTypeIdsCount(GoodsParameter goodsParameter);
    /**
     * 获取推荐商品
     * @param topNum 获取记录个数
     * @return
     */
    public List<Goods> selectRecommandProduct(int topNum);
    /**
     * 分页获取推荐商品
     * @param typeFlag 1=衣匠/2=家定
     * @param pageNow
     * @return
     */
    public List<Goods> selectRecommandProduct(int typeFlag,int pageNow);
    /**
     * 统计设计师的商品
     * @return
     */
    int selectUserIdCountGoods(long userId);
    /**
     * 根据条件查询出总数量
     * @param goodsParameter
     * @return
     */
    int selectByQueryCount(GoodsParameter goodsParameter);
    /**
     * 根据分类类别分类ID（代表分类1层）查询出其商品
     * @param goodsParameter
     * @return
     */
    List<Goods> selectBytypeFlagAndTypeIdList(GoodsParameter goodsParameter);
    /**
     * 根据分类类别分类ID（代表分类1层）查询出记录数
     * @param goodsParameter
     * @return
     */
    int selectBytypeFlagAndTypeIdListCount(GoodsParameter goodsParameter);
    /**
     * 根据类型 获取多个商品简单信息
     * @param productIds
     * @return
     */
    List<Goods> selectListBytypeFlag(GoodsParameter goodsParameter);
    /**
     * 根据类型 获取多个商品记录数
     * @param productIds
     * @return
     */
    int selectListBytypeFlagCount(GoodsParameter goodsParameter);
    /**
     * 修改商品各类统计数量
     * @param goodsParameter
     * @return
     */
    int updateGoodsNum(Goods goods);
    /**
     * 根据商品ID更新浏览数
     * @param goods
     * @return
     */
    public boolean updateBrowersNum(Goods goods);
    /**
     *  根据商品ID更新库存数/销售数/订单数
     * @param goods
     * @return
     */
    public boolean updateInventoryAndSaleAndOrderNum(Goods goods);   
    /**
     * 根据设计师ID获取最新10个商品
     * @param goodsParameter
     * @return
     */
    public List<Goods> selectByDesignerIdTop10(GoodsParameter goodsParameter);
    /**
     * 获取设计师社群推荐商品总数
     * @param goodsParameter
     * @return
     */
    public int selectByDesignerIdAndTypeFlagForZoneRecommandCount(GoodsParameter goodsParameter);
    /**
     *  获取设计师社群推荐商品分页数据
     * @param goodsParameter
     * @return
     */
    public List<Goods> selectByDesignerIdAndTypeFlagForZoneRecommand(GoodsParameter goodsParameter);
    
    /**
     * 查询商品
     * 通过条件 typeIds,typeFlag,orderByClause,title 查询商品
     * @param goodsParameter
     * @return
     */
    public List<Goods> selectGoodsByParam(GoodsParameter goodsParameter);
    /**
     * 统计商品
     * 通过条件 typeIds,typeFlag,orderByClause,title 查询商品
     * @param goodsParameter
     * @return
     */
    public int countGoodsByParam(GoodsParameter goodsParameter);
    
    public PageUtil<com.zimmur.solr.model.Goods> queryGoodsBySolr(GoodsParameter goodsParameter);
	/**
	* <p>Title: getRecHomeGoods</p>
	* <p>Description: 推荐商品查询</p>
	* @return
	*/
	List<RecommendHomeGoods> getRecHomeGoods();
}  